#ifndef _PMM_H_
#define _PMM_H_

#include "../../include/types.h"
#include "../../include/memlayout.h"
// 初始化物理页分配器：
// 从内核镜像末尾按页对齐开始，直到 PHYSTOP，构建空闲页单链表。
void pmm_init(void);

// 分配一个 4KiB 物理页；失败返回 NULL。
void *alloc_page(void);

// 释放一个 4KiB 物理页。
// 传入指针必须页对齐且位于受管范围内。
void free_page(void *pa);

// 可选：分配 n 个页面（当前实现不保证物理连续，仅作占位）。
void *alloc_pages(int n);

// 返回当前空闲页数量（用于诊断/测试）。
size_t pmm_free_pages(void);

#endif
